function Cake( name, duration, path, domain, secure )
{
   this.affix = "";
   if( duration )
   {
      var date = new Date();
	  var curTime = new Date().getTime();

	  date.setTime( curTime + ( 1000 * 60 * duration ) );
	  this.affix = "; expires=" + date.toGMTString();
   }

   if( path )
      this.affix += "; path=" + path;

   if( domain )
      this.affix += "; domain=" + domain;

   if( secure )
      this.affix += "; secure=" + secure;

   function getValue()
   {
      var m = document.cookie.match( new RegExp( "(" + name + "=[^;]*)(;|$)" ) );
      return m ? m[1] : null;
   }

   this.cookieExists = function()
   {
      return getValue() ? true : false;
   }

   this.expire = function()
   {
      var date = new Date();
	  date.setFullYear( date.getYear() - 1 );
	  document.cookie=name + "=noop; expires=" + date.toGMTString();
   }

   this.setPiece = function( key, value )
   {
      var ck = getValue();
      if( /[;, ]/.test(value) )
		 value = window.encodeURI ? encodeURI( value ) : escape( value );         //Mac IE doesn't support encodeURI
      if( value )
      {
         var attrPair = "@" + key + ":"+ value;
         if( ck )
         {
             if( new RegExp("@" + key + "[:]" ).test( ck ) )
		        document.cookie =
				   ck.replace( new RegExp( "@" + key + ":[^@;]*" ), attrPair ) + this.affix;
	         else
		        document.cookie =
				   ck.replace( new RegExp( "(" + name + "=[^;]*)(;|$)" ), "$1" + attrPair ) + this.affix;
         }
         else
	        document.cookie = name + "=" + attrPair + this.affix;
      }
      else
      {
	     if( new RegExp( "@" + key + "[:]" ).test( ck ) )
	        document.cookie = ck.replace( new RegExp( "@" + key + ":[^@;]*" ), "" ) + this.affix;
      }
   }


   this.getPiece = function( key )
   {
      var ck = getValue();
      if( ck )
      {
         var m = ck.match( new RegExp( "@" + key + ":([^@;]*)" ) );
	     if( m )
	     {
	        var value = m[1];
	        if( value )
			   return window.decodeURI ? decodeURI( value ) : unescape( value );	           //Mac IE doesn't support decodeURI
	     }
      }
   }
}
